#ifndef PLATFORM
#define PLATFORM

#include <sstream>
#include <bitset>
#include <unordered_set>
#include <vector>
#include <map>
#include <set>
#include "robot.h"
#include "item.h"

class TRobot;

/**
 * 平台类
 */
class TPlatform
{
public:
    const int number;                                       ///> 1开始，工作台序号
    double x;
    double y;
    int busy_time = -1;                                     ///> 正在生产,还需要的帧数
    bool is_full = false;                                      ///> 可以拿走,产品格状态

    // 以下只有4567号使用
    set<int> free_numbers;                                  ///> 空材料格子    bit<8>
    unordered_set<int> have_numbers;                        ///> 有材料格子    bit<8>
    unordered_set<int> sell_food;                           ///> 满生产格子    full
    unordered_set<int> pre_sel_food;                        ///> 预售生产格子  busytime
    multimap<TRobot*, pair<bool, int>> working_numbers;      ///> 记录哪个机器人,对应的一步操作   (0是材料入，1是产品出,货物号码)

    map<int, vector<pair<TPlatform*, TPlatform*>>> buy_map;   ///> 可以买的平台 <本对象的指针,last指针>
    map<int, vector<pair<TPlatform*, TPlatform*>>> sell_map;  ///> 可以卖向的平台

    bool can_use = true;                                    ///> 是否可以使用
public:
    /**
     * 构造函数
     */
    TPlatform(int _number, double _x, double _y, int _busy_time, bool _full);
    TPlatform(int _number, double _x, double _y);

    /**
     * 平台读函数
     */
    virtual void Read(string &buff);  //更新属性
};


#endif  // PLATFORM